// var n;
// var r = cc._decorator;
// var c = (r.ccclass, r.property);
// var l =
//     (r.executeInEditMode,
//     r.disallowMultiple,
//     r.requireComponent,
//     r.menu,
//     (function (e) {
//         function t() {
//             var t = (null !== e && e.apply(this, arguments)) || this;
//             t.key = "framework";
//             t.i18n_string = "";
//             return t;
//         }
//         __extends(t, e);
//         t.prototype.start = function () {
//             Manager.languageManager.tianjiaHuoShanchuJingling(this.key, this, !0);
//             this.chongzhiZhi();
//         };
//         Object.defineProperty(t.prototype, "string", {
//             get: function () {
//                 return this.i18n_string;
//             },
//             set: function (e) {
//                 this.i18n_string = e;
//                 var t = this.getComponent(cc.Sprite);
//                 if (cc.isValid(t)) {
//                     Manager.languageManager.huoquJingling(this.key, e, function (e) {
//                         if (cc.isValid(t) && e) {
//                             t.spriteFrame = e;
//                         }
//                     });
//                 }
//             },
//             enumerable: !1,
//             configurable: !0
//         });
//         t.prototype.chongzhiZhi = function () {
//             if (!this.i18n_string || "" == this.i18n_string) {
//                 var e = this.getComponent(cc.Sprite);
//                 if (e && e.spriteFrame) {
//                     this.i18n_string = e.spriteFrame.name;
//                 }
//             }
//             this.string = this.i18n_string;
//         };
//         t.prototype.onDestroy = function () {
//             Manager.languageManager.tianjiaHuoShanchuJingling(this.key, this, !1);
//         };
//         __decorate(
//             [
//                 c({
//                     visible: !1
//                 })
//             ],
//             t.prototype,
//             "i18n_string",
//             void 0
//         );
//         __decorate(
//             [
//                 c({
//                     type: cc.String
//                 })
//             ],
//             t.prototype,
//             "string",
//             null
//         );
//         return t;
//     })(cc.Component));
// exports.default = l;

// 引入 Cocos Creator 的装饰器和相关模块
const { ccclass, property, executeInEditMode, disallowMultiple, requireComponent, menu } = cc._decorator;

/**
 * 语言管理组件类，用于动态更新语言字符串和精灵帧
 * @extends cc.Component
 */
@ccclass
@executeInEditMode
@disallowMultiple
@requireComponent(cc.Sprite)
@menu("Framework/LanguageManagerComponent")
class LanguageSprite extends cc.Component {
    /**
     * 键值，用于标记语言资源
     * @type {string}
     */
    key = "framework";

    /**
     * 国际化语言字符串，用于动态绑定
     * @type {string}
     * @private
     */
    @property({ visible: false })
    i18n_string = "";

    /**
     * 语言字符串的封装访问器，用于处理动态绑定和精灵帧更新
     * @type {string}
     */
    @property({ type: cc.String })
    get string() {
        return this.i18n_string;
    }
    set string(value) {
        this.i18n_string = value;

        // 获取当前节点的 Sprite 组件
        const spriteComponent = this.getComponent(cc.Sprite);

        // 如果 Sprite 组件有效，则动态更新其精灵帧
        if (cc.isValid(spriteComponent)) {
            Manager.languageManager.huoquJingling(this.key, value, (spriteFrame) => {
                if (cc.isValid(spriteComponent) && spriteFrame) {
                    spriteComponent.spriteFrame = spriteFrame;
                }
            });
        }
    }

    /**
     * 脚本的生命周期函数，组件启动时调用
     */
    start() {
        // 添加或移除当前组件到语言管理器中，用于动态监听
        Manager.languageManager.tianjiaHuoShanchuJingling(this.key, this, true);

        // 重置国际化字符串值
        this.chongzhiZhi();
    }

    /**
     * 重置国际化字符串值，如果为空则从精灵帧中获取默认值
     */
    chongzhiZhi() {
        if (!this.i18n_string || this.i18n_string === "") {
            const spriteComponent = this.getComponent(cc.Sprite);
            if (spriteComponent && spriteComponent.spriteFrame) {
                this.i18n_string = spriteComponent.spriteFrame.name;
            }
        }
        this.string = this.i18n_string;
    }

    /**
     * 脚本的生命周期函数，在组件销毁时调用
     */
    onDestroy() {
        // 从语言管理器中移除当前组件
        Manager.languageManager.tianjiaHuoShanchuJingling(this.key, this, false);
    }
}

// 导出组件
exports.default = LanguageSprite;
